// 存放 文章管理 相关的接口
const express = require('express');
const router = express.Router();

// 加载 db
const db = require('../db');
// ------------------------- 获取文章列表接口 ----------------------------
// 接口要求
/**
     * 请求方式：GET
     * 请求的url：/my/article/list
     * 请求参数：
     *  - pagenum  -- 页码值
     *  - pagesize -- 每页显示多少条数据
     *  - cate_id  -- 文章分类的Id
     *  - state    -- 文章的状态
 */
router.get('/list', async (req, res) => {
    // console.log(req.query);
    let { pagenum, pagesize, cate_id, state } = req.query;

    // 根据 cate_id 和 state 制作SQL 语句的条件
    let w = '';
    if (cate_id) {
        w += ` and cate_id = ${cate_id} `;
    }
    if (state) {
        w += ` and state = '${state}' `;
    }
    // 查询所有的文章
    let sql = `select a.Id, a.title, a.pub_date, a.state, c.name 
    cate_name from article a
    join category c on a.cate_id=c.Id
    where author_id = ? and is_delete=? ${w}
    limit ${(pagenum - 1) * pagesize},${pagesize}`;
    let r = await db(sql, [req.user.id, 1]); // req.user 是token中得到

    // SQL语句 查询总记录数
    // 查询条件 和 前面查询数据的条件 必须一致
    let sql2 = `select count(*) total from article a
    join category c on a.cate_id=c.Id
    where author_id = ? and is_delete=? ${w}`;
    let r2 = await db(sql2, [req.user.id, 1]);
    // console.log(r2);
    if (r) {
        res.send({ status: 0, message: '获取文章列表数据成功', data: r, total: r2[0].total });
    } else {
        res.send({ status: 1, message: '获取文章列表数据失败' });
    }
});

// ------------------------- 发布文章接口 ----------------------------
// 接口要求
/**
     * 请求方式：POST
     * 请求的url：/my/article/add
     * 请求体：FormData 格式
     *  - title        -- 标题
     *  - cate_id      -- 分类id
     *  - content      -- 内容
     *  - cover_img    -- 文章封面
     *  - state        -- 状态
 */
const path = require('path');
const moment = require('moment');
// 接收处理 FormData 格式的数据，需要使用第三方模块 multer
const multer = require('multer');
// 配置上传目录 到uploads文件夹
const upload = multer({ dest: path.join(__dirname, '../uploads') });
router.post('/add', upload.single('cover_img'), async (req, res) => {
    // console.log(req.body); req.file
    let values = req.body;
    // 添加文件名
    values.cover_img = req.file.filename;
    // 添加发布时间
    values.pub_date = moment().format('YYYY-MM-DD HH:mm:ss');
    // 添加 author_id
    values.author_id = req.user.id;
    let r = await db('insert into article set ?', values);
    if (r && r.affectRows > 0) {
        res.send({ status: 0, message: '添加文章成功' });
    } else {
        res.send({ status: 1, message: '添加文章失败' });
    }
});

// ------------------------- 获取Id删除文章接口 ----------------------------
router.get('/delete/:id', async (req, res) => {
    let id = req.params.id;
    // let r = await db('delete from article where Id =?', id);
    // 做一个假删除  把文章的id_delete 字段修改为0，页面不会看到
    let r = await db('update article set is_delete=0 where Id=?', id);
    if (r && r.affectedRows > 0) {
        res.send({ status: 0, message: '删除文章成功' });
    } else {
        res.send({ status: 1, message: '删除文章失败' });
    }
});

// ------------------------- 根据Id获取文章详情接口 ----------------------------
router.get('/:id', async (req, res) => {
    let id = req.params.id;
    let r = await db('select * from article where Id =?', id);
    // console.log(r);
    if (r && r.length > 0) {
        res.send({ status: 0, message: '获取文章详情成功', data: r[0] });
    } else {
        res.send({ status: 1, message: '获取文章详情失败' });
    }
});

// ------------------------- 根据Id更新文章接口 ----------------------------
router.post('/edit', upload.single('cover_img'), async (req, res) => {
    // console.log(req.body);
    // console.log(req.file);
    let obj = req.body;
    // 如果客户没有提交图片，req.file === undefined
    if (req.file) {
        obj.cover_img = req.file.filename;
    }
    let r = await db('update article set ? where Id =?', [obj, req.body.Id]);
    if (r && r.affectedRows > 0) {
        res.send({ status: 0, message: '更新文章成功' });
    } else {
        res.send({ status: 1, message: '更新文章失败' });
    }
});
// 导出路由对象 （函数）
module.exports = router;
